/*==========================================================
    模块名 :    RtspClt
    文件名 ：   rtspstreammanage.h
    相关文件 ：  
    实现功能 ： rtsp拉流连接管理
    作者：      范瑞彪
    版 权 ：    <Copyright(C) 2023-2027 Suzhou Keda Technology Co., Ltd. 
    All rights reserved.> 
    ------------------------------------------------------------------------------------------------------- 
    修改记录：
    日 期 版本 修改人 走读人 修改记录
    1998/09/15 V1.0 某某（中文） 某某（中文） 记录关键内容
==========================================================*/
#ifndef RTSPCLT_RTSPSTREAMMANAGE_H
#define RTSPCLT_RTSPSTREAMMANAGE_H

#include "pub_defs.h"

// @brief 缓存rtsp会话节点
typedef struct tagRtspStreamItem
{
    int nSessionId;                         // 操作会话id
    char achUrl[POST_PARAM_VAL_BUF_LEN];    // 拉流url
    char achPlayType[POST_PARAM_VAL_BUF_LEN];   // 播放类型（play，playback)
    PRtspStreamItem pNext;                  // 指向下一个rtsp节点
}RtspStreamItem,*PRtspStreamItem;

// @brief 管理rtsp会话节点
typedef struct tagRtspStreamManage
{
    PRtspStreamItem ptHead;                 // 链表头
    PMutex  ptMutex;                        // 互斥锁指针 
}RtspStreamManage,*PRtspStreamManage;

/*========================================================== 
    函数名 ：   CreateRtspStreamManage
    功能 ：		创建rtsp会话节点管理类
    算法实现 ： <可选项> 
    参数说明 ： 
    返回值说明：NULL创建失败，否则返回管理类地址（管理类列释放需要调用 DeleteRtspStreamManage方法）
    ------------------------------------------------------------------------------------------------------- 
    修改记录 ： 日 期 版本 修改人 走读人 修改记录
    1998/09/15 V1.0 某某（中文） 某某（中文） 记录关键内容
===========================================================*/
PRtspStreamManage CreateRtspStreamManage();

/*========================================================== 
    函数名 ：   DeleteRtspStreamManage
    功能 ：		释放rtsp会话节点管理类
    算法实现 ： <可选项> 
    参数说明 ： PRtspStreamManage     ptManage     [in]    rtsp会话节点管理类指针
    返回值说明：
    ------------------------------------------------------------------------------------------------------- 
    修改记录 ： 日 期 版本 修改人 走读人 修改记录
    1998/09/15 V1.0 某某（中文） 某某（中文） 记录关键内容
===========================================================*/
void DeleteRtspStreamManage(PRtspStreamManage ptManage);

/*========================================================== 
    函数名 ：   AppendRtspStreamItem
    功能 ：		添加rtspstream 节点
    算法实现 ： <可选项> 
    参数说明 ： PRtspStreamManage     ptManage     [in]    rtsp会话节点管理类指针
                PRtspStreamItem      ptItem       [in]    要加入管理的rtsp会话节点
    返回值说明：0 成功 -1 失败
    ------------------------------------------------------------------------------------------------------- 
    修改记录 ： 日 期 版本 修改人 走读人 修改记录
    1998/09/15 V1.0 某某（中文） 某某（中文） 记录关键内容
===========================================================*/
int AppendRtspStreamItem(PRtspStreamManage ptManage,PRtspStreamItem ptItem);

/*========================================================== 
    函数名 ：   AppendRtspStreamItemInfo
    功能 ：		添加rtspstream 节点，内部未加锁
    算法实现 ： <可选项> 
    参数说明 ： PRtspStreamManage     ptManage     [in]    rtsp会话节点管理类指针
                int      nSessionId       [in]    会话id
                char*    pchUrl           [in]    拉流地址
                char*    pchPlayType      [in]    播放类型
    返回值说明：0 成功 -1 失败
    ------------------------------------------------------------------------------------------------------- 
    修改记录 ： 日 期 版本 修改人 走读人 修改记录
    1998/09/15 V1.0 某某（中文） 某某（中文） 记录关键内容
===========================================================*/
int AppendRtspStreamItemInfo(PRtspStreamManage ptManage,int nSessionId,char *pchUrl,char *pchPlayType);

/*========================================================== 
    函数名 ：   DeleteRtspStreamItem
    功能 ：		删除rtspstream 节点
    算法实现 ： <可选项> 
    参数说明 ： PRtspStreamManage     ptManage     [in]    rtsp会话节点管理类指针
                int      nSessionId       [in]    会话id
    返回值说明：
    ------------------------------------------------------------------------------------------------------- 
    修改记录 ： 日 期 版本 修改人 走读人 修改记录
    1998/09/15 V1.0 某某（中文） 某某（中文） 记录关键内容
===========================================================*/
void DeleteRtspStreamItem(PRtspStreamManage ptManage,int nSessionId);

/*========================================================== 
    函数名 ：   ExistsRtspStreamItem
    功能 ：		判断rtspstream 节点是否存在，内部不加锁
    算法实现 ： <可选项> 
    参数说明 ： PRtspStreamManage     ptManage     [in]    rtsp会话节点管理类指针
                int      nSessionId       [in]    会话id
    返回值说明：0 不存在 1 存在
    ------------------------------------------------------------------------------------------------------- 
    修改记录 ： 日 期 版本 修改人 走读人 修改记录
    1998/09/15 V1.0 某某（中文） 某某（中文） 记录关键内容
===========================================================*/
int ExistsRtspStreamItem(PRtspStreamManage ptManage,int nSessionId);

/*========================================================== 
    函数名 ：   ExistsRtspStreamItemLock
    功能 ：		判断rtspstream 节点是否存在,内部加锁
    算法实现 ： <可选项> 
    参数说明 ： PRtspStreamManage     ptManage     [in]    rtsp会话节点管理类指针
                int      nSessionId       [in]    会话id
    返回值说明：0 不存在 1 存在
    ------------------------------------------------------------------------------------------------------- 
    修改记录 ： 日 期 版本 修改人 走读人 修改记录
    1998/09/15 V1.0 某某（中文） 某某（中文） 记录关键内容
===========================================================*/
int ExistsRtspStreamItemLock(PRtspStreamManage ptManage,int nSessionId);

/*========================================================== 
    函数名 ：   RtspStreamManageLock
    功能 ：		RtspStreamManage加锁
    算法实现 ： <可选项> 
    参数说明 ： PRtspStreamManage     ptManage     [in]    rtsp会话节点管理类指针
    返回值说明：
    ------------------------------------------------------------------------------------------------------- 
    修改记录 ： 日 期 版本 修改人 走读人 修改记录
    1998/09/15 V1.0 某某（中文） 某某（中文） 记录关键内容
===========================================================*/
void RtspStreamManageLock(PRtspStreamManage ptManage);

/*========================================================== 
    函数名 ：   RtspStreamManageUnLock
    功能 ：		RtspStreamManage解锁
    算法实现 ： <可选项> 
    参数说明 ： PRtspStreamManage     ptManage     [in]    rtsp会话节点管理类指针
    返回值说明：
    ------------------------------------------------------------------------------------------------------- 
    修改记录 ： 日 期 版本 修改人 走读人 修改记录
    1998/09/15 V1.0 某某（中文） 某某（中文） 记录关键内容
===========================================================*/
void RtspStreamManageUnLock(PRtspStreamManage ptManage);

#endif //RTSPCLT_RTSPSTREAMMANAGE_H